package com.cskaoyan.javase.oop2.encapsulate._1extends._6protected._1two;

import com.cskaoyan.javase.oop2.encapsulate._1extends._6protected._0one.CurrentClazz;
import com.cskaoyan.javase.oop2.encapsulate._1extends._6protected._0one.SamePackageSonClazz;

/**
 * 不同包下的子类去访问父类的受保护成员
 * 访问方式有几种?
 *      1.创建父类对象,直接访问父类的受保护成员
 *          不行,无法访问.
 *
 *      2.创建自身子类对象,访问自身从父类中继承过来的受保护成员
 *          可以访问
 *
 *      3.创建"兄弟姐妹"的对象,访问它们从父类中继承过来的受保护成员
 *          不行,无法访问
 *
 * 以上总结,对于父类中的受保护访问权限的成员(变量/方法)
 * 在跨包访问时
 * 首先这个访问的类必须是子类,否则一定无法访问
 * 其次这个访问的类当中,必须创建这个子类自身对象,访问这个子类从父类中继承过来的受保护成员,其余的访问方式也是不行的
 *
 * @since 09:59
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class AnotherPackageSonClazz extends CurrentClazz {
    public static void main(String[] args) {
        // 1.创建父类对象,直接访问父类的受保护成员
        // System.out.println(new CurrentClazz().num);


        // 2.创建自身子类对象,访问自身从父类中继承过来的受保护成员
        AnotherPackageSonClazz ac = new AnotherPackageSonClazz();
        System.out.println(ac.num);


        // 3.创建"兄弟姐妹"的对象,访问它们从父类中继承过来的受保护成员
        SamePackageSonClazz sc = new SamePackageSonClazz();
        // sc.num

    }


    // 跨包子类的成员方法,这里能不能直接访问num呢?
    public void testMember() {
        // 存在this指向当前对象,当前对象是自身对象,所以可以直接访问
        System.out.println(num);
    }

}
